package biblioteca.view;

import java.util.ArrayList;
import java.util.InputMismatchException;
import java.util.Scanner;
import biblioteca.controller.ItemIndisponivelException;
import biblioteca.controller.ItemNaoEncontradoException;
import biblioteca.controller.LocacaoNaoEncontradaException;
import biblioteca.controller.UsuarioNaoEncontradoException;
import biblioteca.model.Apostila;
import biblioteca.model.Biblioteca;
import biblioteca.model.GerenciarAcervo;
import biblioteca.model.GerenciarUsuario;
import biblioteca.model.ItemAcervo;
import biblioteca.model.Livro;
import biblioteca.model.Locacao;
import biblioteca.model.Usuario;

/**
 * Classe cuja finalidade e exibir uma iteracao com o Usuario administrador.
 * @author willenrodrigodeleiros
 *
 */
public class MenuAdministrador {

	static Biblioteca central = new Biblioteca("Central");

	/**
	 * Metodo estatico que cria uma iteracao com o usuario.
	 * @param usuarioLogado Parametro do tipo Usuario que representa a entidade durante
	 * o tempo em que estiver logado no sistema.
	 */
	public static void play(Usuario usuarioLogado){
		int opcao;
		GerenciarAcervo CRUD = new GerenciarAcervo();
		GerenciarUsuario CRUDUsuario = new GerenciarUsuario();
		opcao = 0;
		try{
			do{
				Scanner ler = new Scanner(System.in);
				System.out.println("-------------------------------------");
				System.out.println("Sistema de Biblioteca - Administração");
				System.out.println("-------------------------------------");
				System.out.println("Administrador logado: "+usuarioLogado.getNome());
				System.out.println("-------------------------------------");
				System.out.println("Digite 1: Para Cadastrar Item");
				System.out.println("Digite 2: Para Deletar Item");
				System.out.println("Digite 3: Para Cadastrar Usuario");
				System.out.println("Digite 4: Para Deletar Usuario");
				System.out.println("Digite 5: Para Listar Usuarios");
				System.out.println("Digite 6: Para Situacão do Usuario");
				System.out.println("Digite 7: Para Listar Acervo");
				System.out.println("Digite 8: Para Devolver Item");
				System.out.println("Digite 0: Para Sair");
				opcao = ler.nextInt();
				ler.nextLine();
				switch (opcao) {
				case 0:
					central = null;
					usuarioLogado = null;
					MenuLogin.play();
					break;

				case 1:

					String titulo, autor, isbn;
					int edicao, qtdPaginas;
					int opcaoCadastramento;


					System.out.println("Digite 1: Para cadastrar livro");
					System.out.println("Digite 2: Para cadastrar Apostila");
					System.out.println("Digite 0: Para voltar");
					opcaoCadastramento = ler.nextInt();
					ler.nextLine();

					switch (opcaoCadastramento) {

					case 0:
						System.out.println("voltando...");
						break;
					case 1:
						try{
							System.out.println("Digite o titulo do livro");
							titulo = ler.nextLine();
							System.out.println("Digite o autor do livro");
							autor = ler.nextLine();
							System.out.println("Digite o ISBN");
							isbn = ler.nextLine();
							System.out.println("Digite a edicao do livro");
							edicao = ler.nextInt();
							ler.nextLine();
							Livro livro = new Livro();
							livro.setTitulo(titulo);
							livro.setAutor(autor);
							livro.setIsbn(isbn);
							livro.setEdicao(edicao);
							livro.setSituacao("Disponivel");
							CRUD.addItem(livro);
						}
						catch(InputMismatchException e){
							System.out.println("Digite um número valido");
						}
						break;
					case 2:
						try{
							System.out.println("Digite o titulo da apostila");
							titulo = ler.nextLine();
							System.out.println("Digite o autor do apostila");
							autor = ler.nextLine();
							System.out.println("Digite a quantidade de páginas");
							qtdPaginas = ler.nextInt();
							ler.nextLine();

							Apostila apostila = new Apostila();
							apostila.setTitulo(titulo);
							apostila.setAutor(autor);
							apostila.setQtdPaginas(qtdPaginas);
							apostila.setSituacao("Disponivel");
							CRUD.addItem(apostila);
						}
						catch(InputMismatchException e){
							System.out.println("Digite um número valido");
						}
						break;

					default:
						System.out.println("Valor invalido.");
						break;
					}
					break;

				case 2:
					try{
						String nomeItem;
						System.out.println("Digite o titulo do item");
						nomeItem = ler.nextLine();
						CRUD.deleteItem(central.buscarItem(nomeItem));
					}
					catch(ItemIndisponivelException e){
						System.out.println(e.getMessage());
					}
					catch(ItemNaoEncontradoException e){
						System.out.println(e.getMessage());
					}
					break;

				case 3:
					String nomeUsuario, endereco, cpf, userName, senha;
					int sit;
					System.out.println("Digite o nome");
					nomeUsuario = ler.nextLine();
					System.out.println("Digite o endereço");
					endereco = ler.nextLine();
					System.out.println("Digite o CPF");
					cpf = ler.nextLine();
					System.out.println("User name para login");
					userName = ler.nextLine();
					System.out.println("Senha");
					senha = ler.nextLine();
					System.out.println("Digite 1 - Para Usuário Administrador");
					System.out.println("Digite 2 - Para Usuário Aluno");
					sit = ler.nextInt();

					Usuario user = new Usuario();
					user.setNome(nomeUsuario);
					user.setEndereco(endereco);
					user.setCpf(cpf);
					user.setUserName(userName);
					user.setSenha(senha);
					user.setSit(sit);
					CRUDUsuario.addUsuario(user);
					break;

				case 4:

					try{
						int userCod;
						System.out.println("Digite o codigo do usuario para deletar");
						userCod = ler.nextInt();
						ler.nextLine();
						Usuario usuarioDelete = new Usuario();
						usuarioDelete = CRUDUsuario.getUsuario(userCod);
						CRUDUsuario.deleteUsuario(usuarioDelete.getCodUsuario());
					}
					catch(UsuarioNaoEncontradoException e){
						System.out.println(e.getMessage());
					}
					catch(InputMismatchException e){
						System.out.println("Digite um número valido");
					}
					break;

				case 5:
					ArrayList<Usuario> usuarios;
					usuarios = CRUDUsuario.getUsuarios();
					for (Usuario users : usuarios){
						System.out.println("Codigo: "+users.getCodUsuario());
						System.out.println("Nome: "+users.getNome());
						System.out.println("CPF: "+users.getCpf());
						System.out.println("--------------------------");
					}
					break;

				case 6:

					try{
						ArrayList<String> sitUsuario = new ArrayList<String>();
						int cont = 1;
						System.out.println("Digite o codigo do usuario");
						int sitCodUsuario = ler.nextInt();
						Usuario usuario = new Usuario();
						usuario = CRUDUsuario.getUsuario(sitCodUsuario);
						sitUsuario = CRUDUsuario.sitUsuario(usuario.getCodUsuario());
						for (int i = 0; i<sitUsuario.size();i++){
							System.out.println(sitUsuario.get(i));
							if (cont % 8 == 0){
								System.out.println("----------------------");
							}
							cont++;
						}
					}
					catch(UsuarioNaoEncontradoException e){
						System.out.println(e.getMessage());
					}
					catch(LocacaoNaoEncontradaException e){
						System.out.println(e.getMessage());
					}
					catch(InputMismatchException e){
						System.out.println("Digite um número valido");
					}

					break;

				case 7:
					ArrayList<ItemAcervo> itens = new ArrayList<ItemAcervo>();
					itens = central.listarAcervo();

					for (ItemAcervo item : itens){
						if (item instanceof Livro){
							System.out.println("Codigo item: "+((Livro) item).getCodItem());
							System.out.println("Autor: "+((Livro) item).getAutor());
							System.out.println("Titulo: "+((Livro) item).getTitulo());
							System.out.println("ISBN: "+((Livro) item).getIsbn());
							System.out.println("Edição: "+((Livro) item).getEdicao());
							System.out.println("Situação: "+((Livro) item).getSituacao());
							System.out.println("Tipo de item: Livro");
							System.out.println("-----------------");
						}
						else if(item instanceof Apostila){
							System.out.println("Codigo item: "+((Apostila) item).getCodItem());
							System.out.println("Autor: "+((Apostila) item).getAutor());
							System.out.println("Titulo: "+((Apostila) item).getTitulo());
							System.out.println("Quantidade de Páginas: "+((Apostila) item).getQtdPaginas());
							System.out.println("Situação: "+((Apostila) item).getSituacao());
							System.out.println("Tipo de item: Apostila");
							System.out.println("-----------------");
						}

					}
					break;

				case 8:
					try{
						System.out.println("Digite o codigo do usuário");
						int devCodUser = ler.nextInt();
						Usuario usuario = CRUDUsuario.getUsuario(devCodUser);

						System.out.println("Digite o codigo do item");
						int devCodItem = ler.nextInt();
						ler.nextLine();
						ItemAcervo item = central.buscarItem(devCodItem);
						//locacao = new Locacao();
						System.out.println("Item devolvido com sucesso...");
						System.out.println("Pagar multa: R$ "+central.devolver(item, usuario, new Locacao()));
					}
					catch(ItemNaoEncontradoException e){
						System.out.println(e.getMessage());
					}
					catch(UsuarioNaoEncontradoException e){
						System.out.println(e.getMessage());
					}
					catch(InputMismatchException e){
						System.out.println("Digite um número valido");
					}

					break;

				default:
					System.out.println("Opção invalida!");
					break;
				}

			}while(opcao != 0);
		}
		catch(InputMismatchException e){
			System.out.println("Digite um número valido");
		}
		finally{
			MenuAdministrador.play(usuarioLogado);
		}
	}

}
